package com.app.oral.config

import io.swagger.v3.oas.models.OpenAPI
import io.swagger.v3.oas.models.info.Contact
import io.swagger.v3.oas.models.info.Info
import io.swagger.v3.oas.models.info.License
import io.swagger.v3.oas.models.servers.Server
import io.swagger.v3.oas.models.security.SecurityRequirement
import io.swagger.v3.oas.models.security.SecurityScheme
import io.swagger.v3.oas.models.Components
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration

@Configuration
class OpenApiConfig {

    @Bean
    fun customOpenAPI(): OpenAPI {
        return OpenAPI()
            .info(
                Info()
                    .title("口语练习系统API文档")
                    .version("v1.0.0")
                    .description("""
                        ## 系统架构
                        基于Spring Boot + Kotlin的微信小程序口语练习后端系统
                        
                        ## 双端架构说明
                        - **微信小程序端**: 学生和教师使用微信小程序进行口语练习
                        - **后端管理端**: 管理员通过Web界面进行用户审核和数据管理
                        
                        ## 认证说明
                        - **微信端**: 使用微信OpenID + 应用会话Token双重认证
                        - **管理端**: 使用传统Session认证
                        
                        ## API分组
                        - `/api/v1/auth/*` - 认证相关接口
                        - `/api/v1/users/*` - 用户管理接口  
                        - `/api/v1/classes/*` - 班级管理接口
                        - `/api/v1/exam-papers/*` - 试卷管理接口
                        - `/admin/*` - 管理后台页面路由
                    """.trimIndent())
                    .contact(
                        Contact()
                            .name("开发团队")
                            .email("dev@example.com")
                    )
                    .license(
                        License()
                            .name("MIT License")
                            .url("https://opensource.org/licenses/MIT")
                    )
            )
            .servers(
                listOf(
                    Server()
                        .url("http://localhost:8080")
                        .description("本地开发环境"),
                    Server()
                        .url("https://your-domain.com")
                        .description("生产环境")
                )
            )
            .components(
                Components()
                    .addSecuritySchemes(
                        "BearerAuth",
                        SecurityScheme()
                            .type(SecurityScheme.Type.HTTP)
                            .scheme("bearer")
                            .bearerFormat("JWT")
                            .description("微信小程序会话Token认证")
                    )
                    .addSecuritySchemes(
                        "WeChatAuth", 
                        SecurityScheme()
                            .type(SecurityScheme.Type.APIKEY)
                            .`in`(SecurityScheme.In.HEADER)
                            .name("X-WX-OPENID")
                            .description("微信云托管提供的OpenID")
                    )
                    .addSecuritySchemes(
                        "SessionAuth",
                        SecurityScheme()
                            .type(SecurityScheme.Type.APIKEY)
                            .`in`(SecurityScheme.In.COOKIE)
                            .name("JSESSIONID")
                            .description("管理后台Session认证")
                    )
            )
            .addSecurityItem(
                SecurityRequirement()
                    .addList("BearerAuth")
                    .addList("WeChatAuth")
                    .addList("SessionAuth")
            )
    }
}